#===istalismanplugin===
# -*- coding: utf-8 -*-

# $Revision: 68 $
# $Author: lytors@gmail.com $
# $Date: 2014-04-14 09:21:26 +0000 (Mon, 14 Apr 2014) $

#---------------------------------------------------------------------------------------------------

nakaz_LIMIT = 50
nakaz_FILE  = 'nakazat.txt'

#---------------------------------------------------------------------------------------------------

def nakaz_run ( ptype, psource, pparameters ):
	if not GROUPCHATS.has_key(psource[1]):
		reply(ptype, psource, u'эта команда доступна только в конференции')
		return

	if ptype == 'private':
		reply(ptype, psource, u'не хочу... пиши в общий... :-\\')
		return

	lparam = pparameters.split()
	if len(lparam) > 1:
		reply(ptype, psource, u'читай лучше хелп по команде, а потом пиши мне... *PUNISH*')
		return
	elif len(lparam) == 0:
		lparam.append(psource[2])

	lbotnick = get_bot_nick(psource[1])
	if lparam[0] == lbotnick:
		reply(ptype, psource, u'нихачу')
		return

	LFILE = 'dynamic/%s' % nakaz_FILE
	vika_check_file(LFILE, u'[]' )
	lglob = eval(open(LFILE, 'r').read())

	LFILE = 'dynamic/%s/%s' % ( psource[1], nakaz_FILE )
	vika_check_file(LFILE, u'[]' )
	lloc = eval(open(LFILE, 'r').read())

	llist = lglob + lloc

	if len(llist) == 0:
		reply(ptype, psource, u'нечё писать... пусто там :-(')
		return

	if lparam[0] in GROUPCHATS[psource[1]].keys():
		if GROUPCHATS[psource[1]][lparam[0]]['ishere'] != 1:
			reply(ptype, psource, u'нет его... *PARDON*')
			return
	else:
		reply(ptype, psource, u'а это хто? *SCRATCH*')
		return

	lphrase = random.choice(llist)
	msg(psource[1], u'/me ' + lphrase.replace(u'%s', lparam[0]))

#---------------------------------------------------------------------------------------------------

def nakaz_update ( ptype, psource, pparameters ):
	if not GROUPCHATS.has_key(psource[1]):
		reply(ptype, psource, u'эта команда доступна только в конференции')
		return

	lparam = pparameters.split()
	if len(lparam) == 0:
		reply(ptype, psource, u'читай лучше хелп по команде, а потом пиши мне... *PUNISH*')
		return

	lglob = []

	LGFILE = 'dynamic/%s' % nakaz_FILE
	vika_check_file(LGFILE, u'[]' )
	if lparam[0] in [ u'*', u'+' ]:
		lglob = eval(open(LGFILE, 'r').read())

	LLFILE = 'dynamic/%s/%s' % ( psource[1], nakaz_FILE )
	vika_check_file(LLFILE, u'[]' )
	lloc = eval(open(LLFILE, 'r').read())

	#-----------------------------------------------------------------------------------------------
	# Выводим список всех фраз
	if lparam[0] == u'*':
		if len(lparam) != 1:
			reply(ptype, psource, u'что то ты не то пишешь... читай хелп по команде...')
			return
		lanswer = u' \nСписок глобальных фраз:'
		for litem in range(len(lglob)):
			lanswer += u'\n' + u'{:<5} : '.format(str(litem).decode('utf-8')) + lglob[litem]
		lanswer += u'\n\nСписок локальных фраз:'
		for litem in range(len(lloc)):
			lanswer += u'\n' + u'{:<5} : '.format(str(litem).decode('utf-8')) + lloc[litem]
		if ptype == 'public':
			reply('public', psource, u'в привате')
		reply('private', psource, lanswer)

	#-----------------------------------------------------------------------------------------------
	# Добавляем фразу в локальный справочник
	elif lparam[0] == u'+':
		if len(lparam) == 1:
			reply(ptype, psource, u'а где фраза то? *SCRATCH*')
			return

		if len(lloc) >= nakaz_LIMIT:
			reply(ptype, psource, u'лимит фраз, равный ' + str(nakaz_LIMIT).decode('utf-8') + ', достигнут... вы не можете больше добавлять новые фразы, пока что-нибудь не удалите')
			return

		if pparameters.count('%s') == 0:
			reply(ptype, psource, u'добавляемая фраза не имеет необходимое количество передаваемых параметров... попробуйте ещё раз')
			return

		llist = lglob + lloc
		lphrase = pparameters[1:len(pparameters)].strip()
		if lphrase not in llist:
			lloc.append(lphrase)
			write_file(LLFILE, str(lloc))
			reply(ptype, psource, u'добавила ;)')
		else:
			reply(ptype, psource, u'уже есть...')

	#-----------------------------------------------------------------------------------------------
	# Удаляем фразу из локального справочника
	elif lparam[0] == u'-':
		if len(lparam) != 2:
			reply(ptype, psource, u'что то ты не то пишешь... читай хелп по команде...')
			return
		try:
			lindex = int(lparam[1])
		except ValueError:
			reply(ptype, psource, u'это разве индекс удаляемой фразы? *SCRATCH*')
			return

		if len(lloc) < lindex + 1:
			reply(ptype, psource, u'нет такой фразы...')
			return

		lloc.pop(lindex)
		write_file(LLFILE, str(lloc))
		reply(ptype, psource, u'удалила')

	#-----------------------------------------------------------------------------------------------
	else:
		reply(ptype, psource, u'ты напиши то после команды что-нибудь нужное, а не то что пишешь сейчас...')

#---------------------------------------------------------------------------------------------------

def nakaz_gupdate ( ptype, psource, pparameters ):
	if not GROUPCHATS.has_key(psource[1]):
		reply(ptype, psource, u'эта команда доступна только в конференции')
		return

	lparam = pparameters.split()
	if len(lparam) == 0:
		reply(ptype, psource, u'читай хелп по команде... всему им методом тыка, видители, надо научиться... тыкалки... :-\\')
		return

	LGFILE = 'dynamic/%s' % nakaz_FILE
	vika_check_file(LGFILE, u'[]' )
	lglob = eval(open(LGFILE, 'r').read())

	#-----------------------------------------------------------------------------------------------
	# Добавляем фразу в глобальный справочник
	if lparam[0] == u'+':
		if len(lparam) == 1:
			reply(ptype, psource, u'а где фраза то? *SCRATCH*')
			return

		if pparameters.count('%s') == 0:
			reply(ptype, psource, u'добавляемая фраза не имеет необходимое количество передаваемых параметров... попробуйте ещё раз')
			return

		lphrase = pparameters[1:len(pparameters)].strip()
		if lphrase not in lglob:
			lglob.append(lphrase)
			write_file(LGFILE, str(lglob))
			reply(ptype, psource, u'добавила ;)')
		else:
			reply(ptype, psource, u'уже есть...')

	#-----------------------------------------------------------------------------------------------
	# Удаляем фразу из глобального справочника
	elif lparam[0] == u'-':
		if len(lparam) != 2:
			reply(ptype, psource, u'что то ты не то пишешь... читай хелп по команде...')
			return
		try:
			lindex = int(lparam[1])
		except ValueError:
			reply(ptype, psource, u'это разве индекс удаляемой фразы? *SCRATCH*')
			return

		if len(lglob) < lindex + 1:
			reply(ptype, psource, u'нет такой фразы...')
			return

		lglob.pop(lindex)
		write_file(LGFILE, str(lglob))
		reply(ptype, psource, u'удалила')

	#-----------------------------------------------------------------------------------------------
	else:
		reply(ptype, psource, u'ты напиши то после команды что-нибудь нужное, а не то что пишешь сейчас...')

#---------------------------------------------------------------------------------------------------

register_command_handler(nakaz_run, 'наказать', ['наказать', 'все'], 10, 'Наказать', 'наказать [ник]', ['наказать', 'наказать Вася'])

register_command_handler(nakaz_update, '!наказать', ['наказать', 'все'], 20, """Смотрим и редактируем фразы команды "наказать".
Команда имеет обязательный параметр, значением которого будут:
* - Выводит список всех фраз команды "наказать"
    Синтаксис:
        !наказать *
+ - Добавляет новую фразу в справочник. Максимально локально позволяется добавить """ + str(nakaz_LIMIT) + """ фраз. При добавлении фразы обязательно в тексте нужно указать сочетание символов %s. Сочетание %s будет значением ника указанного при команде "наказать".
    Синтаксис:
        !наказать + <текст фразы>
- - Удаляет фразу по индексу
    Синтаксис:
        !наказать - <индекс фразы>""", '!наказать <параметр> [дополнительные параметры]', ['!наказать *', '!наказать + поставила в угол %s ', '!наказать - 5'])

register_command_handler(nakaz_gupdate, '!глобнаказать', ['наказать', 'все'], 80, """Добавляем и удаляем фразы в глобальной базе.
Команда имеет обязательный параметр, значением которого будут:
+ - Добавляет фразу в глобальную базу. При добавлении фразы обязательно в тексте нужно указать сочетание символов %s. Сочетание %s будет значением ника, указанного при команде "наказать".
    Синтаксис:
        !глобнаказать + <текс фразы>
- - Удаляет фразу по индексу
    Синтаксис:
        !глобнаказать - <индекс фразы>""", '!глобнаказать <параметр> [дополнительные параметры]', ['!глобнаказать + высыпала горох в угол и поставила на горох %s', '!глобнаказать - 5'])

#---------------------------------------------------------------------------------------------------
